package edu.nf.ws.server;

import jakarta.websocket.OnClose;
import jakarta.websocket.OnMessage;
import jakarta.websocket.OnOpen;
import jakarta.websocket.Session;
import jakarta.websocket.server.ServerEndpoint;

import java.io.IOException;

/**
 * @author wangl
 * @date 2025/9/18
 * WebSocket的服务端
 *
 * JSR标准注解@ServerEndpoint，
 * 使用这个注解标注的类将成为WebSocket的
 * 端点（服务端），value属性指定连接
 * 服务端的url地址
 */
@ServerEndpoint("/connect")
public class WebSocketServer {

    /**
     * 当打开新连接时调用此方法
     * session是由web服务器为每一个连接诶的客户端
     * 创建的唯一会话，这个参数非常重要，用于服务端
     * 区分不同的客户端进行通信
     */
    @OnOpen
    public void onOpen(Session session) {
        System.out.println("客户端已连接");
    }

    /**
     * 当接收到客户端发送的消息时调用此方法
     * @param message
     */
    @OnMessage
    public void onMessage(String message, Session session) throws IOException {
        System.out.println("接收消息：" + message);
        //通过session对象发送信息给客户端
        session.getBasicRemote().sendText("Hello client");
    }

    /**
     * 当客户端断开连接时调用此方法
     */
    @OnClose
    public void onClose(Session session) {
        System.out.println("客户端断开连接");
    }
}